#include "KEYConfig.h"
#include "KEY.h"

static uint8_t _key[3];

void KEY_Init(void)
{
    uint8_t i;
    for(i=0;i<keyop_length;i++)
    {
        GPIO_Init(keyPort[i], keyPin[i], GPIO_MODE_IN_PU);
    }
}

/**
 * @brief 扫描按键
 * @return uint8_t 扫描到的按键
 */
uint8_t KEY_Scan()
{
    uint8_t i;
    uint8_t Key_Buf = 0;
    for(i=0;i<keyop_length;i++)
    {
        if(GPIO_ReadPin(keyPort[i], keyPin[i]) == 0)
        {
            Key_Buf |= BIT(i);
        }
    }
    //扫描完毕
    //开始按键处理
    for (i = 0; i < 4; i++)
    {
        if (IS_BIT_1(Key_Buf, BIT(i)))
        {
            return i;
        }
    }
    return notouch;
}

/**
 * @brief 在KEY_Scan的基础上进行按键扫描防重复。
 * 
 * @return uint8_t 
 */
uint8_t KEY_get()
{
    uint8_t return_key;
    _key[0] = KEY_Scan();
    if(_key[0] == _key[1] && _key[0] != _key[2] )
    {
        return_key = _key[0];
    }
    else
    {
        return_key = notouch;
    }
    _key[2] = _key[1];
    _key[1] = _key[0];
    return return_key;
}
